package com.csp.mingyue.common.core.utils;

import cn.hutool.core.util.NumberUtil;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 扩展 Hutool 数字工具类
 *
 * @author Strive
 * @date 2023/11/17 09:48
 */
public class NumberUtils extends NumberUtil {

	/**
	 * 获取众数
	 * @param numbers 目标数字列表
	 * @return 众数，如果存在多个众数，取最先匹配到的众数
	 */
	public static Number findMode(List<Number> numbers) {
		// 使用HashMap来存储每个数字出现的次数
		Map<Number, Integer> frequencyMap = new LinkedHashMap<>();

		// 计算每个数字的出现次数
		for (Number num : numbers) {
			frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
		}

		// 找到最大的出现次数
		int maxFrequency = 0;
		Number mode = 0;
		for (Map.Entry<Number, Integer> entry : frequencyMap.entrySet()) {
			int frequency = entry.getValue();
			if (frequency > maxFrequency) {
				maxFrequency = frequency;
				mode = entry.getKey();
			}
		}

		return mode;
	}

}
